﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negoci = DeltaFlex.Negoci;
using DeltaFlex.Eines;
using DeltaFlex.Negoci;
using System.Drawing;
using System.Threading;
using System.Diagnostics;

using Eines = DeltaFlex.Eines;
using System.IO;
using System.Configuration;
using System.Globalization;

namespace Vista.Privat
{
    public partial class Ordre_Treball : Page
    {
        #region Variables amb ViewState

        public Negoci.Client Client
        {
            get
            {
                object result = Session["_client"];
                if (result == null) result = null;
                return (Negoci.Client)result;
            }
            set { Session["_client"] = value; }
        }

        public Negoci.MaquinaCartoner Maquina
        {
            get
            {
                object result = Session["_maquina"];
                if (result == null) result = null;
                return (Negoci.MaquinaCartoner)result;
            }
            set { Session["_maquina"] = value; }
        }

        public int NextIdOrdreTreball
        {
            get
            {
                return Convert.ToInt32(ViewState["_nextIdOrdreTreball"]) == 0 ?
                  0 : Convert.ToInt32(ViewState["_nextIdOrdreTreball"]);
            }
            set { ViewState["_nextIdOrdreTreball"] = value; }
        }

        public int NextIdAlbara
        {
            get
            {
                return Convert.ToInt32(ViewState["_nextIdAlbara"]) == 0 ?
                  0 : Convert.ToInt32(ViewState["_nextIdAlbara"]);
            }
            set { ViewState["_nextIdAlbara"] = value; }
        }

        public DateTime DataEntrega
        {
            get
            {
                return (ViewState["_dataEntrega"] == null ?
                  DateTime.Today : Convert.ToDateTime(ViewState["_dataEntrega"]));
            }
            set { ViewState["_dataEntrega"] = value; }
        }

        public string HoraEntrega
        {
            get
            {
                return (Convert.ToString(ViewState["_horaEntrega"]) == string.Empty ?
                  "10:00" : Convert.ToString(ViewState["_horaEntrega"]));
            }
            set { ViewState["_horaEntrega"] = value; }
        }

        public string ReferenciaClient
        {
            get
            {
                return (Convert.ToString(ViewState["_referenciaClient"]) == string.Empty ?
                    "-" : Convert.ToString(ViewState["_referenciaClient"]));
            }
            set { ViewState["_referenciaClient"] = value; }
        }

        public string IDTreball
        {
            get
            {
                return (Convert.ToString(ViewState["_idTreball"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_idTreball"]));
            }
            set { ViewState["_idTreball"] = value; }
        }

        public string PedidoClient
        {
            get
            {
                return (Convert.ToString(ViewState["_pedidoClient"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_pedidoClient"]));
            }
            set { ViewState["_pedidoClient"] = value; }
        }

        public string TipusTreball
        {
            get
            {
                return (Convert.ToString(ViewState["_tipusTreball"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_tipusTreball"]));
            }
            set { ViewState["_tipusTreball"] = value; }
        }

        public string TipusCaixa
        {
            get
            {
                return (Convert.ToString(ViewState["_tipusCaixa"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_tipusCaixa"]));
            }
            set { ViewState["_tipusCaixa"] = value; }
        }

        public string Fitxa
        {
            get
            {
                return (Convert.ToString(ViewState["_fitxa"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_fitxa"]));
            }
            set { ViewState["_fitxa"] = value; }
        }

        public string TipusMesures
        {
            get
            {
                return (Convert.ToString(ViewState["_tipusMesures"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_tipusMesures"]));
            }
            set { ViewState["_tipusMesures"] = value; }
        }

        public string Mesures_OT
        {
            get
            {
                return (Convert.ToString(ViewState["_mesures"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_mesures"]));
            }
            set { ViewState["_mesures"] = value; }
        }

        public string NumTroquel
        {
            get
            {
                return (Convert.ToString(ViewState["_numTroquel"]) == string.Empty ?
                   "-" : Convert.ToString(ViewState["_numTroquel"]));
            }
            set { ViewState["_numTroquel"] = value; }
        }

        public string Poses
        {
            get
            {
                return (Convert.ToString(ViewState["_poses"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_poses"]));
            }
            set { ViewState["_poses"] = value; }
        }

        public string MaterialAdjunt
        {
            get
            {
                return (Convert.ToString(ViewState["_materialAdjunt"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_materialAdjunt"]));
            }
            set { ViewState["_materialAdjunt"] = value; }
        }

        public string MaterialTornar
        {
            get
            {
                return (Convert.ToString(ViewState["_materialTornar"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_materialTornar"]));
            }
            set { ViewState["_materialTornar"] = value; }
        }

        public string Colors
        {
            get
            {
                return (Convert.ToString(ViewState["_colors"]) == string.Empty ?
                      "-" : Convert.ToString(ViewState["_colors"]));
            }
            set { ViewState["_colors"] = value; }
        }

        public string TipoClitxe
        {
            get
            {
                return (Convert.ToString(ViewState["_tipoClitxe"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_tipoClitxe"]));
            }
            set { ViewState["_tipoClitxe"] = value; }
        }

        public string FeinaFer
        {
            get
            {
                return (Convert.ToString(ViewState["_feinaFer"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_feinaFer"]));
            }
            set { ViewState["_feinaFer"] = value; }
        }

        public string Observacions
        {
            get
            {
                return (Convert.ToString(ViewState["_observacions"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_observacions"]));
            }
            set { ViewState["_observacions"] = value; }
        }

        public string NomArxiu
        {
            get
            {
                return (Convert.ToString(ViewState["_nomArxiu"]) == string.Empty ?
                  "-" : Convert.ToString(ViewState["_nomArxiu"]));
            }
            set { ViewState["_nomArxiu"] = value; }
        }

        public List<Negoci.Articles> LstArticles
        {
            get
            {
                return (ViewState["_lstArticles"] == null
                  ? new List<Negoci.Articles>() : (List<Negoci.Articles>)ViewState["_lstArticles"]);
            }
            set { ViewState["_lstArticles"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT1
        {
            get { return ViewState["_concepte_OT1"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT1"]; }
            set { ViewState["_concepte_OT1"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT2
        {
            get { return ViewState["_concepte_OT2"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT2"]; }
            set { ViewState["_concepte_OT2"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT3
        {
            get { return ViewState["_concepte_OT3"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT3"]; }
            set { ViewState["_concepte_OT3"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT4
        {
            get { return ViewState["_concepte_OT4"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT4"]; }
            set { ViewState["_concepte_OT4"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT5
        {
            get { return ViewState["_concepte_OT5"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT5"]; }
            set { ViewState["_concepte_OT5"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT6
        {
            get { return ViewState["_concepte_OT6"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT6"]; }
            set { ViewState["_concepte_OT6"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT7
        {
            get { return ViewState["_concepte_OT7"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT7"]; }
            set { ViewState["_concepte_OT7"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT8
        {
            get { return ViewState["_concepte_OT8"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT8"]; }
            set { ViewState["_concepte_OT8"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT9
        {
            get { return ViewState["_concepte_OT9"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT9"]; }
            set { ViewState["_concepte_OT9"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT10
        {
            get { return ViewState["_concepte_OT10"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT10"]; }
            set { ViewState["_concepte_OT10"] = value; }
        }

        public Negoci.Concepte_OT Concepte_OT11
        {
            get { return ViewState["_concepte_OT11"] == null ? new Concepte_OT() : (Negoci.Concepte_OT)ViewState["_concepte_OT11"]; }
            set { ViewState["_concepte_OT11"] = value; }
        }

        public List<Negoci.ClientArticlePreu> LstCAP
        {
            get
            {
                return (ViewState["_lstArticles"] == null
                  ? new List<Negoci.ClientArticlePreu>() : (List<Negoci.ClientArticlePreu>)ViewState["_lstCAP"]);
            }
            set { ViewState["_lstCAP"] = value; }
        }

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string accio = Request.QueryString["a"];

                if (!String.IsNullOrEmpty(accio))
                {
                    // Crear Ordre
                    if (accio.Equals("c"))
                    {
                        upCrearOrdre.Visible = true;
                        upBuscarOrdre.Visible = false;

                        // Carregar l'ordre de treball
                        NextIdOrdreTreball = Negoci.Ordre_Treball.Cercar_NextIdOrdreTreball();
                        lblTitulCrearOrdre.Text += NextIdOrdreTreball.ToString();
                    }
                    // Cercar Ordre
                    if (accio.Equals("s"))
                    {
                        upCrearOrdre.Visible = false;
                        upBuscarOrdre.Visible = true;
                    }
                   AssignarEventsAlsImports();

                }

                // Omplir els combos de la pàgina
                CarregaCombosClientImpressor();
                CarregarCombosConcepte_OT();
                CarregarTipus_Treball();
                CarregarTipus_Caixa();

                btnCrearAlbara.Enabled = false;
            }
        }
        #region Mètodes Privats

        #region Carregar informació incial
        private void CarregaCombosClientImpressor()
        {
            if (Negoci.Client.LlistarClientByIDClient(0).Count > 0)
            {
                int idClient = Convert.ToInt32(Negoci.Client.LlistarClientByIDClient(0)[0].IdClient);
                CarregaComboMaquina(idClient);
            }
        }

        private void CarregarTipus_Treball()
        {
            ddlTipoTreball.DataSource = Negoci.Tipus_Treball.LlistarTotsTipus_Treball();
            ddlTipoTreball.DataTextField = "NomTipusTreball";
            ddlTipoTreball.DataValueField = "IdTreball";
            ddlTipoTreball.DataBind();
        }

        private void CarregarTipus_Caixa()
        {
            ddlTipoCaixa.DataSource = Negoci.Tipus_Caixa.LlistarTotsTipus_Caixa();
            ddlTipoCaixa.DataTextField = "NomTipusCaixa";
            ddlTipoCaixa.DataValueField = "IdTipusCaixa";
            ddlTipoCaixa.DataBind();
        }

        private void CarregaComboMaquina(int idClient)
        {
            ddlMaquina.DataSource = Negoci.MaquinaCartoner.CercarMaquinaByIdClient(idClient);
            ddlMaquina.DataTextField = "NomMaquina";
            ddlMaquina.DataValueField = "IdMaquinaCartoner";
            ddlMaquina.DataBind();

            if (!string.IsNullOrEmpty(ddlMaquina.SelectedValue))
            {
                int idMaquina = Convert.ToInt32(ddlMaquina.SelectedValue);
                CarregaTotReferentMaquina(idMaquina);
            }
        }

        /// <summary>
        /// Carrega els combos tipus clitxer, l'objecte màquina i la deflació a partir del idmaquina.
        /// </summary>
        /// <param name="idMaquina"></param>
        private void CarregaTotReferentMaquina(int idMaquina)
        {
            Maquina = Negoci.MaquinaCartoner.CercarMaquinaByIdMaquina(idMaquina)[0];
            txtDeflacció.Text = Maquina.DeflaccioMaquina;

            List<string> lstTipusClitxer = new List<string>();

            lstTipusClitxer.Add("Liquid " + Maquina.CalibreMaquina);
            lstTipusClitxer.Add("Solid " + Maquina.CalibreMaquina);

            ddlTipoClitxe1.DataSource = lstTipusClitxer;
            ddlTipoClitxe1.DataBind();

            ddlTipoClitxe2.DataSource = lstTipusClitxer;
            ddlTipoClitxe2.DataBind();

            ddlTipoClitxe3.DataSource = lstTipusClitxer;
            ddlTipoClitxe3.DataBind();

            ddlTipoClitxe4.DataSource = lstTipusClitxer;
            ddlTipoClitxe4.DataBind();

            ddlTipoClitxe5.DataSource = lstTipusClitxer;
            ddlTipoClitxe5.DataBind();

            ddlTipoClitxe6.DataSource = lstTipusClitxer;
            ddlTipoClitxe6.DataBind();

            ddlTipoClitxe7.DataSource = lstTipusClitxer;
            ddlTipoClitxe7.DataBind();

            ddlTipoClitxe8.DataSource = lstTipusClitxer;
            ddlTipoClitxe8.DataBind();

            ddlTipoClitxe9.DataSource = lstTipusClitxer;
            ddlTipoClitxe9.DataBind();
        }

        private void CarregarCombosConcepte_OT()
        {
            LstArticles = Negoci.Articles.LlistaTotsArticles();
        }
            
        private void AssignarEventsAlsImports()
        {
            txtImport1.Attributes["onchange"] = "javascript: RecalculaImports();";
            txtImport2.Attributes["onchange"] = "javascript: RecalculaImports();";
            txtImport3.Attributes["onchange"] = "javascript: RecalculaImports();";
            txtImport4.Attributes["onchange"] = "javascript: RecalculaImports();";
            txtImport5.Attributes["onchange"] = "javascript: RecalculaImports();";
            txtImport6.Attributes["onchange"] = "javascript: RecalculaImports();";
            txtImport7.Attributes["onchange"] = "javascript: RecalculaImports();";
            txtImport8.Attributes["onchange"] = "javascript: RecalculaImports();";
            txtImport9.Attributes["onchange"] = "javascript: RecalculaImports();";
            txtImport10.Attributes["onchange"] = "javascript: RecalculaImports();";
            txtImport11.Attributes["onchange"] = "javascript: RecalculaImports();";
        }
        #endregion

        #region Guardar a BD
        private void GuardarOrdreTreball()
        {
            int conceptes_OTGuardats = 0;
            string missatge, exepcio;
            missatge = exepcio = string.Empty;

            try
            {
                Negoci.Ordre_Treball.InsertarOrdre_Treball(NextIdOrdreTreball, Client.IdClient, Client.IdClient, DataEntrega, HoraEntrega, ReferenciaClient, IDTreball, PedidoClient, TipusTreball, TipusCaixa, Fitxa, TipusMesures, Mesures_OT,
                    NumTroquel, Poses, MaterialAdjunt, MaterialTornar, Colors, TipoClitxe, Maquina.IdMaquinaCartoner, Maquina.DeflaccioMaquina, FeinaFer, Observacions, NomArxiu);
            }
            catch (Exception ex)
            {
                exepcio = "Error en guardar la Ordre de treball número: '" + NextIdOrdreTreball + "' <br/> " + ex.Message;
            }

            try
            {
                conceptes_OTGuardats = GuardarConcepte_OT();
            }
            catch (Exception ex)
            {
                exepcio = "Error en guardar els Conceptes de la OT número: '" + NextIdOrdreTreball + "' <br/> " + ex.Message;
            }

            if (String.IsNullOrEmpty(exepcio))
                missatge = ConstantsOrdre.mplbGuardarOrdreOK;
            else
                missatge = ConstantsOrdre.mplbGuardarOrdreKO + " <br/> " + exepcio;

            NetejaControls(this.Controls);

            mpCrearOrdre.LabelHeader = ConstantsOrdre.mplhCrearOrdre;
            mpCrearOrdre.LabelBody = missatge;
            mpCrearOrdre.MostraInfo = true;

            // Una espera de 2 segons mentre apareix la finestra emergent amb la impressora
            Thread.Sleep(2000);

            mpCrearOrdre.MostrarModal();
        }

        private int GuardarConcepte_OT()
        {
            int resposta = 0;
            decimal import = 0;

            try
            {
                if (Concepte_OT1.Quantitat > 0)
                {
                    import = !string.IsNullOrEmpty(txtImport1.Text) ? Convert.ToDecimal(txtImport1.Text.Split(' ')[0].Replace('.',',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT1.Quantitat, Concepte_OT1.Article.IdArticle,
                                                                  Concepte_OT1.Ample, Concepte_OT1.Alt, import);
                }

                if (Concepte_OT2.Quantitat> 0)
                {
                    import = !string.IsNullOrEmpty(txtImport2.Text) ? Convert.ToDecimal(txtImport2.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT2.Quantitat, Concepte_OT2.Article.IdArticle,
                                                                  Concepte_OT2.Ample, Concepte_OT2.Alt, import);
                }

                if (Concepte_OT3.Quantitat> 0)
                {
                    import = !string.IsNullOrEmpty(txtImport3.Text) ? Convert.ToDecimal(txtImport3.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT3.Quantitat, Concepte_OT3.Article.IdArticle,
                                                                  Concepte_OT3.Ample, Concepte_OT3.Alt, import);
                }

                if (Concepte_OT4.Quantitat> 0)
                {
                    import = !string.IsNullOrEmpty(txtImport4.Text) ? Convert.ToDecimal(txtImport4.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT4.Quantitat, Concepte_OT4.Article.IdArticle,
                                                                  Concepte_OT4.Ample, Concepte_OT4.Alt, import);
                }

                if (Concepte_OT5.Quantitat> 0)
                {
                    import = !string.IsNullOrEmpty(txtImport5.Text) ? Convert.ToDecimal(txtImport5.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT5.Quantitat, Concepte_OT5.Article.IdArticle,
                                                                  Concepte_OT5.Ample, Concepte_OT5.Alt, import);
                }

                if (Concepte_OT6.Quantitat> 0)
                {
                    import = !string.IsNullOrEmpty(txtImport6.Text) ? Convert.ToDecimal(txtImport6.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT6.Quantitat, Concepte_OT6.Article.IdArticle,
                                                                  Concepte_OT6.Ample, Concepte_OT6.Alt, import);
                }

                if (Concepte_OT7.Quantitat> 0)
                {
                    import = !string.IsNullOrEmpty(txtImport7.Text) ? Convert.ToDecimal(txtImport7.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT7.Quantitat, Concepte_OT7.Article.IdArticle,
                                                                  Concepte_OT7.Ample, Concepte_OT7.Alt, import);
                }

                if (Concepte_OT8.Quantitat> 0)
                {
                    import = !string.IsNullOrEmpty(txtImport8.Text) ? Convert.ToDecimal(txtImport8.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT8.Quantitat, Concepte_OT8.Article.IdArticle,
                                                                  Concepte_OT8.Ample, Concepte_OT8.Alt, import);
                }

                if (Concepte_OT9.Quantitat> 0)
                {
                    import = !string.IsNullOrEmpty(txtImport9.Text) ? Convert.ToDecimal(txtImport9.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT9.Quantitat, Concepte_OT9.Article.IdArticle,
                                                                  Concepte_OT9.Ample, Concepte_OT9.Alt, import);
                }

                if (Concepte_OT10.Quantitat> 0)
                {
                    import = !string.IsNullOrEmpty(txtImport10.Text) ? Convert.ToDecimal(txtImport10.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT10.Quantitat, Concepte_OT10.Article.IdArticle,
                                                                  Concepte_OT10.Ample, Concepte_OT10.Alt, import);
                }

                if (Concepte_OT11.Quantitat > 0)
                {
                    import = !string.IsNullOrEmpty(txtImport11.Text) ? Convert.ToDecimal(txtImport11.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    resposta += Negoci.Concepte_OT.InsertarConcepte_OT(NextIdOrdreTreball, Concepte_OT11.Quantitat, Concepte_OT11.Article.IdArticle,
                                                                  Concepte_OT11.Ample, Concepte_OT11.Alt,import);
                }
            }
            catch { throw; }

            return resposta * (-1);
        }

        private void GuardarAlbara()
        {
            string missatge, exepcio;
            missatge = exepcio = string.Empty;
            decimal importTotal = 0;

            NextIdAlbara = Negoci.Albara.Cercar_NextIdAlbara();
            CarregaDadesOrdreTreball();

            try
            {
                GuardarConcepte_Albara();
                importTotal = !string.IsNullOrEmpty(txtImportTotal.Text) ? Convert.ToDecimal(txtImportTotal.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
            }
            catch (Exception ex)
            {
                exepcio = "Error en guardar els conceptes de l'albarà número: '" + NextIdAlbara + "' <br/> " + ex.Message;
            }

            try
            {
                Negoci.Albara.InsertarAlbara(NextIdAlbara, NextIdOrdreTreball, Client.IdClient, importTotal);
            }
            catch (Exception ex)
            {
                exepcio = "Error en guardar l'albarà número: '" + NextIdAlbara + "' <br/> " + ex.Message;
            }

            if (String.IsNullOrEmpty(exepcio))
            {
                missatge = ConstantsOrdre.mplbGuardarAlbaraOK;
                CrearAlbaranImprimir();
            }
            else
                missatge = ConstantsOrdre.mplbGuardarAlbaraKO + " <br/> " + exepcio;

            NetejaControls(this.Controls);

            mpCrearOrdre.LabelHeader = ConstantsOrdre.mplhGuardarAlbara;
            mpCrearOrdre.LabelBody = missatge;
            mpCrearOrdre.MostraInfo = true;

            mpCrearOrdre.MostrarModal();
        }

        private void GuardarConcepte_Albara()
        {
            string strSuperficie;
            decimal decimalSuperficie, pvp, import;
            strSuperficie = string.Empty;
            decimalSuperficie = import = pvp = 0;

            try
            {
                if (Concepte_OT1.Quantitat > 0)
                {
                   CalculsConcepte(1, ref strSuperficie, ref decimalSuperficie, ref pvp);

                   import = !string.IsNullOrEmpty(txtImport1.Text) ? Convert.ToDecimal(txtImport1.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT1.Article.IdArticle, Concepte_OT1.Quantitat, strSuperficie, decimalSuperficie, 
                                                                   Concepte_OT1.Article.Unitat, pvp, import);
                }

                if (Concepte_OT2.Quantitat > 0)
                {
                    CalculsConcepte(2, ref strSuperficie, ref decimalSuperficie, ref pvp);

                    import = !string.IsNullOrEmpty(txtImport2.Text) ? Convert.ToDecimal(txtImport2.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT2.Article.IdArticle, Concepte_OT2.Quantitat, strSuperficie, decimalSuperficie,
                                                                   Concepte_OT2.Article.Unitat, pvp, import);
                }

                if (Concepte_OT3.Quantitat > 0)
                {
                    CalculsConcepte(3, ref strSuperficie, ref decimalSuperficie, ref pvp);

                    import = !string.IsNullOrEmpty(txtImport3.Text) ? Convert.ToDecimal(txtImport3.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT3.Article.IdArticle, Concepte_OT3.Quantitat, strSuperficie, decimalSuperficie,
                                                                   Concepte_OT3.Article.Unitat, pvp, import);
                }

                if (Concepte_OT4.Quantitat > 0)
                {
                    CalculsConcepte(4, ref strSuperficie, ref decimalSuperficie, ref pvp);

                    import = !string.IsNullOrEmpty(txtImport4.Text) ? Convert.ToDecimal(txtImport4.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT4.Article.IdArticle, Concepte_OT4.Quantitat, strSuperficie, decimalSuperficie,
                                                                   Concepte_OT4.Article.Unitat, pvp, import);
                }

                if (Concepte_OT5.Quantitat > 0)
                {
                    CalculsConcepte(5, ref strSuperficie, ref decimalSuperficie, ref pvp);

                    import = !string.IsNullOrEmpty(txtImport5.Text) ? Convert.ToDecimal(txtImport5.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT5.Article.IdArticle, Concepte_OT5.Quantitat, strSuperficie, decimalSuperficie,
                                                                   Concepte_OT5.Article.Unitat, pvp, import);
                }

                if (Concepte_OT6.Quantitat > 0)
                {
                    CalculsConcepte(6, ref strSuperficie, ref decimalSuperficie, ref pvp);

                    import = !string.IsNullOrEmpty(txtImport6.Text) ? Convert.ToDecimal(txtImport6.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT6.Article.IdArticle, Concepte_OT6.Quantitat, strSuperficie, decimalSuperficie,
                                                                   Concepte_OT6.Article.Unitat, pvp, import);
                }

                if (Concepte_OT7.Quantitat > 0)
                {
                    CalculsConcepte(7, ref strSuperficie, ref decimalSuperficie, ref pvp);

                    import = !string.IsNullOrEmpty(txtImport7.Text) ? Convert.ToDecimal(txtImport7.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT7.Article.IdArticle, Concepte_OT7.Quantitat, strSuperficie, decimalSuperficie,
                                                                   Concepte_OT7.Article.Unitat, pvp, import);
                }

                if (Concepte_OT8.Quantitat > 0)
                {
                    CalculsConcepte(8, ref strSuperficie, ref decimalSuperficie, ref pvp);

                    import = !string.IsNullOrEmpty(txtImport8.Text) ? Convert.ToDecimal(txtImport8.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT8.Article.IdArticle, Concepte_OT8.Quantitat, strSuperficie, decimalSuperficie,
                                                                   Concepte_OT8.Article.Unitat, pvp, import);
                }

                if (Concepte_OT9.Quantitat > 0)
                {
                    CalculsConcepte(9, ref strSuperficie, ref decimalSuperficie, ref pvp);

                    import = !string.IsNullOrEmpty(txtImport9.Text) ? Convert.ToDecimal(txtImport9.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT9.Article.IdArticle, Concepte_OT9.Quantitat, strSuperficie, decimalSuperficie,
                                                                   Concepte_OT9.Article.Unitat, pvp, import);
                }

                if (Concepte_OT10.Quantitat > 0)
                {
                    CalculsConcepte(10, ref strSuperficie, ref decimalSuperficie, ref pvp);

                    import = !string.IsNullOrEmpty(txtImport10.Text) ? Convert.ToDecimal(txtImport10.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT10.Article.IdArticle, Concepte_OT10.Quantitat, strSuperficie, decimalSuperficie,
                                                                   Concepte_OT10.Article.Unitat, pvp, import);
                }

                if (Concepte_OT11.Quantitat > 0)
                {
                    CalculsConcepte(11, ref strSuperficie, ref decimalSuperficie, ref pvp);

                    import = !string.IsNullOrEmpty(txtImport11.Text) ? Convert.ToDecimal(txtImport11.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                    Negoci.Concepte_Albara.InsertarConcepte_Albara(NextIdAlbara, Concepte_OT11.Article.IdArticle, Concepte_OT11.Quantitat, strSuperficie, decimalSuperficie,
                                                                   Concepte_OT11.Article.Unitat, pvp, import);
                }
            }
            catch { throw; }

        }

        #endregion

        #region Carrega dades del Formulari i BD al ViewState
        /// <summary>
        /// Recull totes les dades que hi ha al formulari i les guarda al ViewState
        /// </summary>
        private void CarregaDadesOrdreTreball()
        {
            Client = Negoci.Client.LlistarClientByIDClient(Convert.ToInt32(ddlClient.SelectedValue))[0];

            if (!String.IsNullOrEmpty(txtDataEntrega.Text))
                DataEntrega = Convert.ToDateTime(txtDataEntrega.Text);
            else
                DataEntrega = DateTime.Today;

            HoraEntrega = txtHoraEntrega.Text;
            ReferenciaClient = txtRefClient.Text;
            IDTreball = txtIDTreball.Text;
            PedidoClient = txtPedidoClient.Text;
            TipusTreball = ddlTipoTreball.SelectedValue;
            TipusCaixa = ddlTipoCaixa.SelectedValue;
            Fitxa = txtFitxa.Text;
            TipusMesures = ddlTipoMesures.SelectedValue;
            Mesures_OT = txtMesures.Text;
            NumTroquel = txtNumTroquel.Text;
            Poses = txtPoses.Text;
            MaterialAdjunt = txtMaterialAdjunt.Text;
            MaterialTornar = txtMaterialTornar.Text;

            CarregaColorsiTipoClitxe();

            FeinaFer = txtFeinaFer.Text;
            Observacions = txtObservacions.Text;
            NomArxiu = txtNomArxiu.Text;

            CarregaConcepte_OT();
        }

        /// <summary>
        /// Donat que els colors i els tipos de clitxe, es carregaran en una sola columna de la BD, es concatenaran tots els valors en un string separat per ';'
        /// </summary>
        private void CarregaColorsiTipoClitxe()
        {
            if (!String.IsNullOrEmpty(txtColors1.Text))
            {
                Colors = txtColors1.Text;
                TipoClitxe = ddlTipoClitxe1.SelectedValue;
            }

            if (!String.IsNullOrEmpty(txtColors2.Text))
            {
                Colors += ";" + txtColors2.Text;
                TipoClitxe += ";" + ddlTipoClitxe2.SelectedValue;
            }

            if (!String.IsNullOrEmpty(txtColors3.Text))
            {
                Colors += ";" + txtColors3.Text;
                TipoClitxe += ";" + ddlTipoClitxe3.SelectedValue;
            }

            if (!String.IsNullOrEmpty(txtColors4.Text))
            {
                Colors += ";" + txtColors4.Text;
                TipoClitxe += ";" + ddlTipoClitxe4.SelectedValue;
            }

            if (!String.IsNullOrEmpty(txtColors5.Text))
            {
                Colors += ";" + txtColors5.Text;
                TipoClitxe += ";" + ddlTipoClitxe5.SelectedValue;
            }

            if (!String.IsNullOrEmpty(txtColors6.Text))
            {
                Colors += ";" + txtColors6.Text;
                TipoClitxe += ";" + ddlTipoClitxe6.SelectedValue;
            }

            if (!String.IsNullOrEmpty(txtColors7.Text))
            {
                Colors += ";" + txtColors7.Text;
                TipoClitxe += ";" + ddlTipoClitxe7.SelectedValue;
            }

            if (!String.IsNullOrEmpty(txtColors8.Text))
            {
                Colors += ";" + txtColors8.Text;
                TipoClitxe += ";" + ddlTipoClitxe8.SelectedValue;
            }

            if (!String.IsNullOrEmpty(txtColors9.Text))
            {
                Colors += ";" + txtColors9.Text;
                TipoClitxe += ";" + ddlTipoClitxe9.SelectedValue;
            }
        }

        /// <summary>
        /// Guardar al ViewState els conceptes de la OT
        /// </summary>
        private void CarregaConcepte_OT()
        {
            //Per petició del client, a l'altura i a l'amplada d'un clitxer se li han de sumar 6 cm i s'ha de guardar en m
            // L'altura i l'amplada d'un plastic s'ha de passar a m
            // La restar d'articles es guarden i calculen com a unitats sense amplada ni altura

            string[] tipusArticle;
            
            if (!String.IsNullOrEmpty(txtCant1.Text))
            {
                Concepte_OT1 = new Concepte_OT();
                Concepte_OT1.Quantitat = Convert.ToInt32(txtCant1.Text);
                Concepte_OT1.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT1.SelectedItem.Value)));

                if (!string.IsNullOrEmpty(Concepte_OT1.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT1.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple1.Text))
                            Concepte_OT1.Ample = (decimal)0.06;
                        else
                            Concepte_OT1.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple1.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt1.Text))
                            Concepte_OT1.Alt = (decimal)0.06;
                        else
                            Concepte_OT1.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt1.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple1.Text))
                            Concepte_OT1.Ample = 0;
                        else
                            Concepte_OT1.Ample = decimal.Divide(Convert.ToDecimal(txtAmple1.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt1.Text))
                            Concepte_OT1.Alt = 0;
                        else
                            Concepte_OT1.Alt = decimal.Divide(Convert.ToDecimal(txtAlt1.Text), 100);
                    }
                }
            }

            if (!String.IsNullOrEmpty(txtCant2.Text))
            {
                Concepte_OT2 = new Concepte_OT();
                Concepte_OT2.Quantitat = Convert.ToInt32(txtCant2.Text);
                Concepte_OT2.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT2.SelectedItem.Value)));

                if (!string.IsNullOrEmpty(Concepte_OT2.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT2.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple2.Text))
                            Concepte_OT2.Ample = (decimal)0.06;
                        else
                            Concepte_OT2.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple2.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt2.Text))
                            Concepte_OT2.Alt = (decimal)0.06;
                        else
                            Concepte_OT2.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt2.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple2.Text))
                            Concepte_OT2.Ample = 0;
                        else
                            Concepte_OT2.Ample = decimal.Divide(Convert.ToDecimal(txtAmple2.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt2.Text))
                            Concepte_OT2.Alt = 0;
                        else
                            Concepte_OT2.Alt = decimal.Divide(Convert.ToDecimal(txtAlt2.Text), 100);
                    }
                }
            }

            if (!String.IsNullOrEmpty(txtCant3.Text))
            {
                Concepte_OT3 = new Concepte_OT();
                Concepte_OT3.Quantitat = Convert.ToInt32(txtCant3.Text);
                Concepte_OT3.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT3.SelectedItem.Value)));

                if (!string.IsNullOrEmpty(Concepte_OT3.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT3.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple3.Text))
                            Concepte_OT3.Ample = (decimal)0.06;
                        else
                            Concepte_OT3.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple3.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt3.Text))
                            Concepte_OT3.Alt = (decimal)0.06;
                        else
                            Concepte_OT3.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt3.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple3.Text))
                            Concepte_OT3.Ample = 0;
                        else
                            Concepte_OT3.Ample = decimal.Divide(Convert.ToDecimal(txtAmple3.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt3.Text))
                            Concepte_OT3.Alt = 0;
                        else
                            Concepte_OT3.Alt = decimal.Divide(Convert.ToDecimal(txtAlt3.Text), 100);
                    }
                }
            }

            if (!String.IsNullOrEmpty(txtCant4.Text))
            {
                Concepte_OT4 = new Concepte_OT();
                Concepte_OT4.Quantitat = Convert.ToInt32(txtCant4.Text);
                Concepte_OT4.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT4.SelectedItem.Value)));


                if (!string.IsNullOrEmpty(Concepte_OT4.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT4.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple4.Text))
                            Concepte_OT4.Ample = (decimal)0.06;
                        else
                            Concepte_OT4.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple4.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt4.Text))
                            Concepte_OT4.Alt = (decimal)0.06;
                        else
                            Concepte_OT4.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt4.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple4.Text))
                            Concepte_OT4.Ample = 0;
                        else
                            Concepte_OT4.Ample = decimal.Divide(Convert.ToDecimal(txtAmple4.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt4.Text))
                            Concepte_OT4.Alt = 0;
                        else
                            Concepte_OT4.Alt = decimal.Divide(Convert.ToDecimal(txtAlt4.Text), 100);
                    }
                }
            }

            if (!String.IsNullOrEmpty(txtCant5.Text))
            {
                Concepte_OT5 = new Concepte_OT();
                Concepte_OT5.Quantitat = Convert.ToInt32(txtCant5.Text);
                Concepte_OT5.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT5.SelectedItem.Value)));

                if (!string.IsNullOrEmpty(Concepte_OT5.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT5.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple5.Text))
                            Concepte_OT5.Ample = (decimal)0.06;
                        else
                            Concepte_OT5.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple5.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt5.Text))
                            Concepte_OT5.Alt = (decimal)0.06;
                        else
                            Concepte_OT5.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt5.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple5.Text))
                            Concepte_OT5.Ample = 0;
                        else
                            Concepte_OT5.Ample = decimal.Divide(Convert.ToDecimal(txtAmple5.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt5.Text))
                            Concepte_OT5.Alt = 0;
                        else
                            Concepte_OT5.Alt = decimal.Divide(Convert.ToDecimal(txtAlt5.Text), 100);
                    }
                }
            }

            if (!String.IsNullOrEmpty(txtCant6.Text))
            {
                Concepte_OT6 = new Concepte_OT();
                Concepte_OT6.Quantitat = Convert.ToInt32(txtCant6.Text);
                Concepte_OT6.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT6.SelectedItem.Value)));

                if (!string.IsNullOrEmpty(Concepte_OT6.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT6.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple6.Text))
                            Concepte_OT6.Ample = (decimal)0.06;
                        else
                            Concepte_OT6.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple6.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt6.Text))
                            Concepte_OT6.Alt = (decimal)0.06;
                        else
                            Concepte_OT6.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt6.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple6.Text))
                            Concepte_OT6.Ample = 0;
                        else
                            Concepte_OT6.Ample = decimal.Divide(Convert.ToDecimal(txtAmple6.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt6.Text))
                            Concepte_OT6.Alt = 0;
                        else
                            Concepte_OT6.Alt = decimal.Divide(Convert.ToDecimal(txtAlt6.Text), 100);
                    }
                }
            }

            if (!String.IsNullOrEmpty(txtCant7.Text))
            {
                Concepte_OT7 = new Concepte_OT();
                Concepte_OT7.Quantitat = Convert.ToInt32(txtCant7.Text);
                Concepte_OT7.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT7.SelectedItem.Value)));

                if (!string.IsNullOrEmpty(Concepte_OT7.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT7.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple7.Text))
                            Concepte_OT7.Ample = (decimal)0.06;
                        else
                            Concepte_OT7.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple7.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt1.Text))
                            Concepte_OT7.Alt = (decimal)0.06;
                        else
                            Concepte_OT7.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt7.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple7.Text))
                            Concepte_OT7.Ample = 0;
                        else
                            Concepte_OT7.Ample = decimal.Divide(Convert.ToDecimal(txtAmple7.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt7.Text))
                            Concepte_OT7.Alt = 0;
                        else
                            Concepte_OT7.Alt = decimal.Divide(Convert.ToDecimal(txtAlt7.Text), 100);
                    }
                }
            }

            if (!String.IsNullOrEmpty(txtCant8.Text))
            {
                Concepte_OT8 = new Concepte_OT();
                Concepte_OT8.Quantitat = Convert.ToInt32(txtCant8.Text);
                Concepte_OT8.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT8.SelectedItem.Value)));

                if (!string.IsNullOrEmpty(Concepte_OT8.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT8.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple8.Text))
                            Concepte_OT8.Ample = (decimal)0.06;
                        else
                            Concepte_OT8.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple8.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt8.Text))
                            Concepte_OT8.Alt = (decimal)0.06;
                        else
                            Concepte_OT8.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt8.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple8.Text))
                            Concepte_OT8.Ample = 0;
                        else
                            Concepte_OT8.Ample = decimal.Divide(Convert.ToDecimal(txtAmple8.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt8.Text))
                            Concepte_OT8.Alt = 0;
                        else
                            Concepte_OT8.Alt = decimal.Divide(Convert.ToDecimal(txtAlt8.Text), 100);
                    }
                }
            }

            if (!String.IsNullOrEmpty(txtCant9.Text))
            {
                Concepte_OT9 = new Concepte_OT();
                Concepte_OT9.Quantitat = Convert.ToInt32(txtCant9.Text);
                Concepte_OT9.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT9.SelectedItem.Value)));

                if (!string.IsNullOrEmpty(Concepte_OT9.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT9.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple9.Text))
                            Concepte_OT9.Ample = (decimal)0.06;
                        else
                            Concepte_OT9.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple9.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt9.Text))
                            Concepte_OT9.Alt = (decimal)0.06;
                        else
                            Concepte_OT9.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt9.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple9.Text))
                            Concepte_OT9.Ample = 0;
                        else
                            Concepte_OT9.Ample = decimal.Divide(Convert.ToDecimal(txtAmple9.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt9.Text))
                            Concepte_OT9.Alt = 0;
                        else
                            Concepte_OT9.Alt = decimal.Divide(Convert.ToDecimal(txtAlt9.Text), 100);
                    }
                }
            }

            if (!String.IsNullOrEmpty(txtCant10.Text))
            {
                Concepte_OT10 = new Concepte_OT();
                Concepte_OT10.Quantitat = Convert.ToInt32(txtCant10.Text);
                Concepte_OT10.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT10.SelectedItem.Value)));

                if (!string.IsNullOrEmpty(Concepte_OT10.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT10.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple10.Text))
                            Concepte_OT10.Ample = (decimal)0.06;
                        else
                            Concepte_OT10.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple10.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt1.Text))
                            Concepte_OT10.Alt = (decimal)0.06;
                        else
                            Concepte_OT10.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt10.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple10.Text))
                            Concepte_OT10.Ample = 0;
                        else
                            Concepte_OT10.Ample = decimal.Divide(Convert.ToDecimal(txtAmple10.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt10.Text))
                            Concepte_OT10.Alt = 0;
                        else
                            Concepte_OT10.Alt = decimal.Divide(Convert.ToDecimal(txtAlt10.Text), 100);
                    }
                }
            }

            if (!String.IsNullOrEmpty(txtCant11.Text))
            {
                Concepte_OT11 = new Concepte_OT();
                Concepte_OT11.Quantitat = Convert.ToInt32(txtCant11.Text);
                Concepte_OT11.Article = LstArticles.Find(i => i.IdArticle.Equals(Convert.ToInt32(ddlConcepte_OT11.SelectedItem.Value)));

                if (!string.IsNullOrEmpty(Concepte_OT11.Article.NomArticle))
                {
                    tipusArticle = Concepte_OT11.Article.NomArticle.Split(' ');

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE))
                    {
                        if (string.IsNullOrEmpty(txtAmple1.Text))
                            Concepte_OT11.Ample = (decimal)0.06;
                        else
                            Concepte_OT11.Ample = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAmple11.Text), 6), 100);

                        if (string.IsNullOrEmpty(txtAlt11.Text))
                            Concepte_OT11.Alt = (decimal)0.06;
                        else
                            Concepte_OT11.Alt = decimal.Divide(decimal.Add(Convert.ToDecimal(txtAlt11.Text), 6), 100);
                    }

                    if (tipusArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        if (string.IsNullOrEmpty(txtAmple1.Text))
                            Concepte_OT11.Ample = 0;
                        else
                            Concepte_OT11.Ample = decimal.Divide(Convert.ToDecimal(txtAmple11.Text), 100);

                        if (string.IsNullOrEmpty(txtAlt11.Text))
                            Concepte_OT11.Alt = 0;
                        else
                            Concepte_OT11.Alt = decimal.Divide(Convert.ToDecimal(txtAlt11.Text), 100);
                    }
                }
            }
        }
        /// <summary>
        /// Recupera la relació ClientArticlePreu
        /// </summary>
        private void CarregaPreusArticlesByClient()
        {
            LstCAP = Negoci.ClientArticlePreu.LlistarClientArticlePreu_ByClientArticle(Client.IdClient, 0);
        }

        #endregion

        #region Calucla Conceptes
        /// <summary>
        /// Calcula els conceptes d'una OT i d'un Albarà
        /// </summary>
        /// <param name="concepte">Indica sobre quin Concepte es treballa</param>
        /// <param name="strSuperficie">Retorna una cadena indicant l'ample i l'alt del concepte en cas que en tingui</param>
        /// <param name="decimalSuperficie">Retorna la superficie d'un concepte en cas de que en tingui</param>
        /// <param name="pvp">Retorna el preu del concepte</param>
        private void CalculsConcepte(int concepte, ref string strSuperficie, ref decimal decimalSuperficie, ref decimal pvp)
        {
            string[] nomArticle;
            strSuperficie = string.Empty;
            decimalSuperficie = pvp = 0;

           switch (concepte)
            {
                case 1:
                    
                    if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT1.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT1.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT1.Article.Pvp;

                    nomArticle = Concepte_OT1.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT1.Ample.ToString() + "X" + Concepte_OT1.Alt.ToString();
                        decimalSuperficie = decimal.Multiply(Concepte_OT1.Ample, Concepte_OT1.Alt);
                        Concepte_OT1.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT1.Quantitat);
                    }
                    else
                        Concepte_OT1.Import = decimal.Multiply(pvp, Concepte_OT1.Quantitat);
                    break;

                case 2:
                    
                     if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT2.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT2.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT2.Article.Pvp;

                    nomArticle = Concepte_OT2.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT2.Ample.ToString() + "X" + Concepte_OT2.Alt.ToString();
                        decimalSuperficie = Concepte_OT2.Ample * Concepte_OT2.Alt;
                        Concepte_OT2.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT2.Quantitat);
                    }
                    else
                        Concepte_OT2.Import = decimal.Multiply(pvp, Concepte_OT2.Quantitat);
                    
                    break;

                case 3:
                    
                     if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT3.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT3.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT3.Article.Pvp;

                    nomArticle = Concepte_OT3.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT3.Ample.ToString() + "X" + Concepte_OT3.Alt.ToString();
                        decimalSuperficie = Concepte_OT3.Ample * Concepte_OT3.Alt;
                        Concepte_OT3.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT3.Quantitat);
                    }
                    else
                        Concepte_OT3.Import = decimal.Multiply(pvp, Concepte_OT3.Quantitat);
                    
                    break;

                case 4:

                     if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT4.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT4.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT4.Article.Pvp;

                    nomArticle = Concepte_OT4.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT4.Ample.ToString() + "X" + Concepte_OT4.Alt.ToString();
                        decimalSuperficie = Concepte_OT4.Ample * Concepte_OT4.Alt;
                        Concepte_OT4.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT4.Quantitat);
                    }
                    else
                        Concepte_OT4.Import = decimal.Multiply(pvp, Concepte_OT4.Quantitat);
                    
                    break;

                case 5:

                     if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT5.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT5.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT5.Article.Pvp;

                    nomArticle = Concepte_OT5.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT5.Ample.ToString() + "X" + Concepte_OT5.Alt.ToString();
                        decimalSuperficie = Concepte_OT5.Ample * Concepte_OT5.Alt;
                        Concepte_OT5.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT5.Quantitat);
                    }
                    else
                        Concepte_OT5.Import = decimal.Multiply(pvp, Concepte_OT5.Quantitat);
                    
                    break;

                case 6:

                     if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT6.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT6.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT6.Article.Pvp;

                    nomArticle = Concepte_OT6.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT6.Ample.ToString() + "X" + Concepte_OT6.Alt.ToString();
                        decimalSuperficie = Concepte_OT6.Ample * Concepte_OT6.Alt;
                        Concepte_OT6.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT6.Quantitat);
                    }
                    else
                        Concepte_OT6.Import = decimal.Multiply(pvp, Concepte_OT6.Quantitat);
                    
                    break;

                case 7:

                     if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT7.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT7.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT7.Article.Pvp;

                    nomArticle = Concepte_OT7.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT7.Ample.ToString() + "X" + Concepte_OT7.Alt.ToString();
                        decimalSuperficie = Concepte_OT7.Ample * Concepte_OT7.Alt;
                        Concepte_OT7.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT7.Quantitat);
                    }
                    else
                        Concepte_OT7.Import = decimal.Multiply(pvp, Concepte_OT7.Quantitat);
                    break;

                case 8:

                     if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT8.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT8.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT8.Article.Pvp;

                    nomArticle = Concepte_OT8.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT8.Ample.ToString() + "X" + Concepte_OT8.Alt.ToString();
                        decimalSuperficie = Concepte_OT8.Ample * Concepte_OT8.Alt;
                        Concepte_OT8.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT8.Quantitat);
                    }
                    else
                        Concepte_OT8.Import = decimal.Multiply(pvp, Concepte_OT8.Quantitat);
                    
                    break;

                case 9:

                     if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT9.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT9.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT9.Article.Pvp;

                    nomArticle = Concepte_OT9.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT9.Ample.ToString() + "X" + Concepte_OT9.Alt.ToString();
                        decimalSuperficie = Concepte_OT9.Ample * Concepte_OT9.Alt;
                        Concepte_OT9.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT9.Quantitat);
                    }
                    else
                        Concepte_OT9.Import = decimal.Multiply(pvp, Concepte_OT9.Quantitat);
                    
                    break;

                case 10:

                     if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT10.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT10.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT10.Article.Pvp;

                    nomArticle = Concepte_OT10.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT10.Ample.ToString() + "X" + Concepte_OT10.Alt.ToString();
                        decimalSuperficie = Concepte_OT10.Ample * Concepte_OT10.Alt;
                        Concepte_OT10.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT10.Quantitat);
                    }
                    else
                        Concepte_OT10.Import = decimal.Multiply(pvp, Concepte_OT10.Quantitat);
                    
                    break;

                case 11:

                     if (LstCAP.Count > 0)
                    {
                        for (int i = 0; i < LstCAP.Count; i++)
                        {
                            if (LstCAP[i].IdArticle == Concepte_OT11.Article.IdArticle)
                            {
                                pvp = LstCAP[i].Preu;
                                break;
                            }
                            else
                                pvp = Concepte_OT11.Article.Pvp;
                        }
                    }
                    else
                        pvp = Concepte_OT11.Article.Pvp;

                    nomArticle = Concepte_OT11.Article.NomArticle.Split(' ');

                    if (nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_CLICHE) || nomArticle[0].Equals(ConstantsOrdre.NOM_ARTICLE_MILAR))
                    {
                        strSuperficie = Concepte_OT11.Ample.ToString() + "X" + Concepte_OT11.Alt.ToString();
                        decimalSuperficie = Concepte_OT11.Ample * Concepte_OT11.Alt;
                        Concepte_OT11.Import = decimal.Multiply(decimal.Multiply(pvp, decimalSuperficie), Concepte_OT11.Quantitat);
                    }
                    else
                        Concepte_OT11.Import = decimal.Multiply(pvp, Concepte_OT11.Quantitat);
                    
                    break;
            }
        }
        #endregion

        #region Neteja Controls
        /// <summary>
        ///Neteja tots els controls del formulari.
        /// </summary>
        /// <param name="controles"></param>
        public void NetejaControls(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).ClearSelection();
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).ClearSelection();
                else if (control is RadioButton)
                    ((RadioButton)control).Checked = false;
                else if (control is CheckBox)
                    ((CheckBox)control).Checked = false;
                else if (control.HasControls())
                    //Esta linea detecta un Control que contigui altres Controls
                    //Així cap control es quedarà sense netejar
                    NetejaControls(control.Controls);
            }
        }
        #endregion

        #region Imprimir
        private void CrearAlbaranImprimir()
        {
            #region Crear Albaran
            #region Inicialització i estils
            PDFManager pdf = new PDFManager();
            pdf.EmptyLineHeight = 5;
            pdf.Margin = 32;
            
            PDFTextStyle styleHeaderTitle = new PDFTextStyle(Eines.FontSize.xsmall, Eines.TextAlign.Center, true, false, false);
            PDFTextStyle styleBodyTitle = new PDFTextStyle(Eines.FontSize.xxsmall, Eines.TextAlign.Left, true, false, false);
            PDFTextStyle styleBodyTitleR = new PDFTextStyle(Eines.FontSize.xxsmall, Eines.TextAlign.Right, true, false, false);
            PDFTextStyle styleBodyNormalLeft = new PDFTextStyle(Eines.FontSize.xxsmaller, Eines.TextAlign.Left, false, false, false);
            PDFTextStyle styleBodyNormalRight = new PDFTextStyle(Eines.FontSize.xxsmaller, Eines.TextAlign.Right, false, false, false);
            PDFTextStyle styleBodyNormalCenter = new PDFTextStyle(Eines.FontSize.xxsmaller, Eines.TextAlign.Center, false, false, false);
           
            string logoPath = Server.MapPath("~/Imatges/logoAlbaran.jpg");

            PDFDocument doc = new PDFDocument();
            #endregion

            #region Capçalera
            doc.Header = new PDFHeader(new PDFText("", styleHeaderTitle),
                                       new PDFImage(logoPath),
                                       false,
                                       50);

            doc.Header.UseRealHeight = false;
            #endregion

            #region Cos
            doc.Body = new PDFBody();

            List<IPDFElement> elements;

            // Títul
            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFText("Albarn", styleBodyTitle));
            elements.Add(new Eines.PDFText("Fecha: " + DateTime.Today.ToShortDateString(), styleBodyTitleR));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "11", 0));

            // Línia
            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFLine(LineWidth.Half));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "100", 0));

            // Informació de l'Albarà i el nº de compte
            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFText("Albaran nº: " + NextIdAlbara, styleBodyNormalLeft));
            elements.Add(new Eines.PDFText("Nº Cliente: " + Client.IdClient, styleBodyNormalRight));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "11", 0));

            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFText("Nº Orden: " + NextIdOrdreTreball, styleBodyNormalLeft));
            elements.Add(new Eines.PDFText("Cliente: " + Client.NomClient + " - " + Client.NifClient, styleBodyNormalRight));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "11", 0));

            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFText("Nº Pedido/Cod. Cliente: " + PedidoClient, styleBodyNormalLeft));
            elements.Add(new Eines.PDFText(Client.AdreçaClient.CarrerNumero + " " + Client.AdreçaClient.Poligon, styleBodyNormalRight));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "11", 0));

            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFText("Referencia: " + ReferenciaClient, styleBodyNormalLeft));
            elements.Add(new Eines.PDFText(Client.AdreçaClient.Ciutat + " " + Client.AdreçaClient.CodiPostal, styleBodyNormalRight));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "11", 0));

            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFText("Id Trebajo: " + IDTreball, styleBodyNormalLeft));
            elements.Add(new Eines.PDFText(Client.AdreçaClient.Provincia + " (" + Client.AdreçaClient.Pais + ")", styleBodyNormalRight));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "11", 0));

            elements = new List<IPDFElement>();
            if (String.IsNullOrEmpty(NumTroquel) || NumTroquel.Equals("-"))
                elements.Add(new Eines.PDFText("Nº Troquel: " + Mesures_OT, styleBodyNormalLeft));
            else
                elements.Add(new Eines.PDFText("Nº Troquel: " + NumTroquel, styleBodyNormalLeft));
            elements.Add(new Eines.PDFText(Client.TelefonClient.ToString(), styleBodyNormalRight));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "11", 0));

            // Doble Línia
            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFLine(LineWidth.Double));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "100", 0));

            // Espai en blanc
            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFText());
            elements.Add(new Eines.PDFText());
            doc.Body.Rows.Add(new Eines.PDFRow());

            // Doble Línia
            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFLine(LineWidth.Double));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "100", 0));

            // Conceptes_OT Albarà
            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFText("|Ref. Articulo", styleBodyNormalLeft));
            elements.Add(new Eines.PDFText("|Concepto", styleBodyNormalLeft));
            elements.Add(new Eines.PDFText("|Cantidad", styleBodyNormalLeft));
            elements.Add(new Eines.PDFText("|Medida", styleBodyNormalLeft));
            elements.Add(new Eines.PDFText("|Superfície", styleBodyNormalLeft));
            elements.Add(new Eines.PDFText("|Unidades", styleBodyNormalLeft));
            elements.Add(new Eines.PDFText("|Preu de Venta", styleBodyNormalLeft));
            elements.Add(new Eines.PDFText("|Importe", styleBodyNormalLeft));
            doc.Body.Rows.Add(new Eines.PDFRow(elements));

            // Linia
            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFLine(LineWidth.Half));
            doc.Body.Rows.Add(new Eines.PDFRow(elements, "100", 0));

            // Llistat d'articles
            string strSuperficie;
            decimal decimalSuperficie, pvp, import, total;
            strSuperficie = string.Empty;
            decimalSuperficie = import = pvp = total = 0;

            if (Concepte_OT1.Quantitat > 0)
            {
                CalculsConcepte(1, ref strSuperficie, ref decimalSuperficie, ref pvp);

                import = !string.IsNullOrEmpty(txtImport1.Text) ? Convert.ToDecimal(txtImport1.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
                                
                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT1.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT1.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT1.Quantitat.ToString("N2",CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie!=0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT1.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }

            if (Concepte_OT2.Quantitat > 0)
            {
                CalculsConcepte(2, ref strSuperficie, ref decimalSuperficie, ref pvp);
                import = !string.IsNullOrEmpty(txtImport2.Text) ? Convert.ToDecimal(txtImport2.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
                
                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT2.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT2.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT2.Quantitat.ToString("N2", CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie != 0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT2.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }

            if (Concepte_OT3.Quantitat > 0)
            {
                CalculsConcepte(3, ref strSuperficie, ref decimalSuperficie, ref pvp);
                import = !string.IsNullOrEmpty(txtImport3.Text) ? Convert.ToDecimal(txtImport3.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT3.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT3.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT3.Quantitat.ToString("N2", CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie != 0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT3.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }

            if (Concepte_OT4.Quantitat > 0)
            {
                CalculsConcepte(4, ref strSuperficie, ref decimalSuperficie, ref pvp);
                import = !string.IsNullOrEmpty(txtImport4.Text) ? Convert.ToDecimal(txtImport4.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;

                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT4.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT4.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT4.Quantitat.ToString("N2", CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie != 0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT4.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }

            if (Concepte_OT5.Quantitat > 0)
            {
                CalculsConcepte(5, ref strSuperficie, ref decimalSuperficie, ref pvp);
                import = !string.IsNullOrEmpty(txtImport5.Text) ? Convert.ToDecimal(txtImport5.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
                
                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT5.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT5.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT5.Quantitat.ToString("N2", CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie != 0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT5.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }

            if (Concepte_OT6.Quantitat > 0)
            {
                CalculsConcepte(6, ref strSuperficie, ref decimalSuperficie, ref pvp);
                import = !string.IsNullOrEmpty(txtImport6.Text) ? Convert.ToDecimal(txtImport6.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
                
                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT6.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT6.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT6.Quantitat.ToString("N2", CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie != 0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT6.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }

            if (Concepte_OT7.Quantitat > 0)
            {
                CalculsConcepte(7, ref strSuperficie, ref decimalSuperficie, ref pvp);
                import = !string.IsNullOrEmpty(txtImport7.Text) ? Convert.ToDecimal(txtImport7.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
                
                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT7.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT7.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT7.Quantitat.ToString("N2",CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie != 0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT7.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }

            if (Concepte_OT8.Quantitat > 0)
            {
                CalculsConcepte(8, ref strSuperficie, ref decimalSuperficie, ref pvp);
                import = !string.IsNullOrEmpty(txtImport8.Text) ? Convert.ToDecimal(txtImport8.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
                
                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT8.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT8.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT8.Quantitat.ToString("N2", CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie != 0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT8.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }

            if (Concepte_OT9.Quantitat > 0)
            {
                CalculsConcepte(9, ref strSuperficie, ref decimalSuperficie, ref pvp);
                import = !string.IsNullOrEmpty(txtImport9.Text) ? Convert.ToDecimal(txtImport9.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
                
                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT9.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT9.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT9.Quantitat.ToString("N2", CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie != 0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT9.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }

            if (Concepte_OT10.Quantitat > 0)
            {
                CalculsConcepte(10, ref strSuperficie, ref decimalSuperficie, ref pvp);
                import = !string.IsNullOrEmpty(txtImport10.Text) ? Convert.ToDecimal(txtImport10.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
                
                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT10.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT10.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT10.Quantitat.ToString("N2", CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie != 0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT10.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }

            if (Concepte_OT11.Quantitat > 0)
            {
                CalculsConcepte(11, ref strSuperficie, ref decimalSuperficie, ref pvp);
                import = !string.IsNullOrEmpty(txtImport11.Text) ? Convert.ToDecimal(txtImport11.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
                
                elements = new List<IPDFElement>();
                elements.Add(new Eines.PDFText(Concepte_OT11.Article.ReferenciaArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT11.Article.NomArticle, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT11.Quantitat.ToString("N2", CultureInfo.CurrentCulture), styleBodyNormalCenter));
                elements.Add(new Eines.PDFText(!string.IsNullOrEmpty(strSuperficie) ? strSuperficie : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(decimalSuperficie != 0 ? decimalSuperficie.ToString("N5", CultureInfo.CurrentCulture) : string.Empty, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(Concepte_OT11.Article.Unitat, styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(pvp.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                elements.Add(new Eines.PDFText(import.ToString("C2", CultureInfo.CurrentCulture), styleBodyNormalLeft));
                doc.Body.Rows.Add(new Eines.PDFRow(elements));
            }
            
            // Espai en blanc
            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFText(string.Empty));
            doc.Body.Rows.Add(new Eines.PDFRow(elements,100));

            // TOTAL
            total = !string.IsNullOrEmpty(txtImportTotal.Text) ? Convert.ToDecimal(txtImportTotal.Text.Split(' ')[0].Replace('.', ',')) : (decimal)0;
            elements = new List<IPDFElement>();
            elements.Add(new Eines.PDFText("TOTAL " + total.ToString("C2", CultureInfo.CurrentCulture), styleBodyTitleR));
            doc.Body.Rows.Add(new Eines.PDFRow(elements));
            #endregion

            #region Peu
            List<string> lstTextPeu = new List<string>();
            lstTextPeu.Add("Observaciones del cliente");
            lstTextPeu.Add("Pol.Ind. Cataluña Sud");
            lstTextPeu.Add("parcela 24.4");
            lstTextPeu.Add("43500 Tortosa");
            lstTextPeu.Add("Tarragona (España)");
            lstTextPeu.Add("DeltaFlex, S.C.P.- J55633861");

            doc.Footer = new PDFFooter(true, lstTextPeu, styleBodyTitle);

            #endregion

            #region Finalització

            pdf.Documentos.Add(doc);

            string nomFitxer = (txtNomArxiu.Text == string.Empty ? "-" : txtNomArxiu.Text) + ".pdf";

            string pathPDF = Server.MapPath(ConfigurationManager.AppSettings["pathTMP"]) + nomFitxer;

            if (File.Exists(pathPDF))
                File.Delete(pathPDF);

            pdf.CrearPDF(Server.MapPath(ConfigurationManager.AppSettings["pathTMP"]), nomFitxer, "Albaran");

            FileStream file = File.Open(pathPDF, FileMode.Open, FileAccess.Read);

            BinaryReader br = new BinaryReader(file);
            byte[] dades = new byte[(int)file.Length];
            br.Read(dades, 0, (int)file.Length);
            br.Close();
            file.Close();

            if (File.Exists(pathPDF))
                File.Delete(pathPDF);

            if (dades != null)
            {
                Response.ContentType = "application/pdf";
                Response.AppendHeader("content-length", dades.Length.ToString());
                Response.AppendHeader("content-disposition", "attachment; filename=" + nomFitxer);
                Response.BinaryWrite(dades);
                Response.End();
            }

            #endregion

            #endregion
        }

        #endregion

        #region Omplir fulla de Filmació-Màquina
        private void OmpleFilmacioMaquina()
        {
            FilmacioMaquines fm = new FilmacioMaquines();

            HttpContext.Current.Session["NumOrdre"] = NextIdOrdreTreball.ToString();
            HttpContext.Current.Session["DataEntrega"] = DataEntrega;
            HttpContext.Current.Session["HoraEntrega"] = HoraEntrega;
            HttpContext.Current.Session["Impressor"] = Client.NomClient;
            HttpContext.Current.Session["Maquina"] = Maquina.NomMaquina;
            HttpContext.Current.Session["ReferenciaClient"] = ReferenciaClient;
            HttpContext.Current.Session["IDTreball"] = IDTreball;
            HttpContext.Current.Session["PedidoClient"] = PedidoClient;

            Thread.Sleep(9000);
            Response.Redirect(Request.ApplicationPath + ConstantsGlobals.URLFilMaquina);

        }

        #endregion
        #endregion

        #region Events 
        protected void ddlClient_TextChanged(object sender, EventArgs e)
        {
            ddlImpresor.Text = ddlClient.Text;
        }

        protected void ddlImpresor_TextChanged(object sender, EventArgs e)
        {
            int idClient = Convert.ToInt32(ddlImpresor.SelectedValue);
            CarregaComboMaquina(idClient);
        }

        protected void ddlMaquina_TextChanged(object sender, EventArgs e)
        {
            int idMaquina = Convert.ToInt32(ddlMaquina.SelectedValue);
            CarregaTotReferentMaquina(idMaquina);
        }

        protected void btnImprimirMaquina_Click(object sender, EventArgs e)
        {
            string pathFitxaMaquina = Server.MapPath(ConfigurationManager.AppSettings["pathFitxaMaquina"]) + Maquina.NomMaquina + ".pdf";

            if (!File.Exists(pathFitxaMaquina))
            {
                mpCrearOrdre.LabelHeader = ConstantsOrdre.mplbImprimirMaquina;
                mpCrearOrdre.LabelBody = ConstantsOrdre.mplbNoFitxaMaquina;
                mpCrearOrdre.MostraInfo = true;
                mpCrearOrdre.MostrarModal();
            }
            else
            {
                FileStream file = File.Open(pathFitxaMaquina, FileMode.Open, FileAccess.Read);

                BinaryReader br = new BinaryReader(file);
                byte[] dades = new byte[(int)file.Length];
                br.Read(dades, 0, (int)file.Length);
                br.Close();
                file.Close();

                if (dades != null)
                {
                    Response.ContentType = "application/pdf";
                    Response.AppendHeader("content-length", dades.Length.ToString());
                    Response.AppendHeader("content-disposition", "attachment; filename=" + Maquina.NomMaquina);
                    Response.BinaryWrite(dades);
                    Response.End();
                }
            }
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            CarregaDadesOrdreTreball();

           switch (TipusTreball)
            {
                // Imprimir ordre, fitxa màquina i filmació
                case ConstantsOrdre.CLITXER_NOU:
                    GuardarOrdreTreball();
                    OmpleFilmacioMaquina();
                    break;

                case ConstantsOrdre.ARREGLO:
                case ConstantsOrdre.ESBOÇ:
                case ConstantsOrdre.PLOTTER:
                case ConstantsOrdre.PROVADECOLOR:
                case ConstantsOrdre.FITXA:
                    GuardarOrdreTreball();
                    NextIdOrdreTreball = Negoci.Ordre_Treball.Cercar_NextIdOrdreTreball();
                    upCrearOrdre.Update();
                    break;

                // Imprimir albaran en forma de pressupost    
                case ConstantsOrdre.PRESSUPOST:
                    GuardarOrdreTreball();
                    GuardarAlbara();
                    break;

                default:
                    mpCrearOrdre.LabelHeader = ConstantsOrdre.mplhCrearOrdre;
                    mpCrearOrdre.LabelBody = ConstantsOrdre.mplbFaltaTipusTreball;
                    mpCrearOrdre.MostraInfo = true;
                    mpCrearOrdre.MostrarModal();
                    break;
            }
        }

        protected void btnNetejar_Click(object sender, EventArgs e)
        {
            NetejaControls(this.Controls);
        }

        protected void btnCrearAlbara_Click(object sender, EventArgs e)
        {
            GuardarAlbara();
        }

        protected void btnCalcImportConcepteOT_Click(object sender, EventArgs e)
        {
            string mesuresAlbara = string.Empty;
            decimal superficie, pvp, importTotal;
            superficie = pvp = importTotal = 0;

            CarregaDadesOrdreTreball();
            CarregaPreusArticlesByClient();
            
            if (Concepte_OT1.Quantitat > 0)
            {
                CalculsConcepte(1, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport1.Text = Concepte_OT1.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT1.Import;
            }

            if (Concepte_OT2.Quantitat > 0)
            {
                CalculsConcepte(2, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport2.Text = Concepte_OT2.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT2.Import;
            }

            if (Concepte_OT3.Quantitat > 0)
            {
                CalculsConcepte(3, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport3.Text = Concepte_OT3.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT3.Import;
            }

            if (Concepte_OT4.Quantitat > 0)
            {
                CalculsConcepte(4, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport4.Text = Concepte_OT4.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT4.Import;
            }

            if (Concepte_OT5.Quantitat > 0)
            {
                CalculsConcepte(5, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport5.Text = Concepte_OT5.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT5.Import;
            }

            if (Concepte_OT6.Quantitat > 0)
            {
                CalculsConcepte(6, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport6.Text = Concepte_OT6.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT6.Import;
            }

            if (Concepte_OT7.Quantitat > 0)
            {
                CalculsConcepte(7, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport7.Text = Concepte_OT7.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT7.Import;
            }

            if (Concepte_OT8.Quantitat > 0)
            {
                CalculsConcepte(8, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport8.Text = Concepte_OT8.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT8.Import;
            }

            if (Concepte_OT9.Quantitat > 0)
            {
                CalculsConcepte(9, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport9.Text = Concepte_OT9.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT9.Import;
            }

            if (Concepte_OT10.Quantitat > 0)
            {
                CalculsConcepte(10, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport10.Text = Concepte_OT10.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT10.Import;
            }

            if (Concepte_OT11.Quantitat > 0)
            {
                CalculsConcepte(11, ref mesuresAlbara, ref superficie, ref pvp);
                txtImport11.Text = Concepte_OT11.Import.ToString("F2", CultureInfo.CurrentCulture);
                importTotal += Concepte_OT11.Import;
            }

            txtImportTotal.Text = importTotal.ToString("F2",CultureInfo.CurrentCulture);
            if (!string.IsNullOrEmpty(txtImportTotal.Text))
                btnCrearAlbara.Enabled = true;
               
        }

        protected void btnCercarOT_Click(object sender, EventArgs e)
        {
            int? idOrdreTreball = string.IsNullOrEmpty(txtCOIdOT.Text) ? (int?)null : Convert.ToInt32(txtCOIdOT.Text);
            int idClient = Convert.ToInt32(ddlCOClient.SelectedValue);
            string nomArxiu = string.IsNullOrEmpty(txtCONomArxiu.Text) ? null : txtCONomArxiu.Text;
            string referenciaClient = string.IsNullOrEmpty(txtCORefClient.Text) ? null : txtCORefClient.Text;
            string idTreball = string.IsNullOrEmpty(txtCOIdTreball.Text) ? null : txtCOIdTreball.Text;
            string pedidoClient = string.IsNullOrEmpty(txtCOPedidoClient.Text) ? null : txtCOPedidoClient.Text;

            gvOT.DataSource = Negoci.Ordre_Treball.LlistarOrdreTreball(idOrdreTreball, idClient, nomArxiu, referenciaClient, idTreball, pedidoClient);
            gvOT.DataBind();

        }

        protected void gvOT_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            // Carregar OT i editar-la
            if (e.CommandName.Equals(ConstantsOrdre.EDITAR))
            {
                int idOT = Convert.ToInt32(e.CommandArgument);
                Response.Redirect(Request.ApplicationPath + ConstantsGlobals.URLEditarOrdre + idOT);
            }
        }

        #endregion

    }
}